package lock.lock8;

import java.util.concurrent.TimeUnit;

/**
 * @program: algorithm
 * @description: 8锁
 * @author: 陈恩涛
 * @create: 2022-08-11 07:20
 **/
public class SyncLock8 {

    public static void main(String[] args) {
        final Phone phone1 = new Phone();
        final Phone phone2= new Phone();

        new Thread( () ->{
            phone1.sendEmail();
        },"A").start();

        try {
            TimeUnit.MILLISECONDS.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread( () ->{
            phone2.sendSMS();
        },"B").start();
    }
}

/**
 * 8锁案例：
 *  1、标准访问两个线程 sendEmail sendSMS
 *  2、sendEmail方法加上暂停3秒 sendEmail sendSMS
 *  3、添加一个普通的hello方法 hello sendEmail
 *  4、有两部手机 sendSMS sendEmail
 *  5、两个静态方法一部手机 sendEmail sendSMS
 *  6、两个静态同步方法两部手机 sendEmail sendSMS
 *  7、一个静态同步方法，一个普通同步方法，一部手机 sendSMS sendEmail
 *  8、一个静态同步方法，一个普通同步方法，两部手机 sendSMS sendEmail
 *
 */
class Phone{

    public static synchronized void sendEmail() {
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("---------sendEmail");
    }

    public synchronized void sendSMS() {
        System.out.println("---------sendSMS");
    }

    public void hello() {
        System.out.println("---------hello");
    }
}
